#include<iostream>
using namespace std;
class date{
    private:
        int _year;
        int _month;
        int _day;
    public:
        void print()
        {
            printf("%d %d %d\n", _year, _month, _day);
        }
        //构造函数
        date(int year = 1, int month = 1, int day = 1)
        {
            _year = year;
            _month = month;
            _day = day;
        }
        //拷贝构造函数
        date(const date& d){    //不用&会陷入死循环  const : 防止内容被修改
            _year = d._year;    // this->_year = d._year;
            _month = d._month;
            _day = d._day;
        }
        //析构函数
        ~date()
        {
            cout << this <<"~date()" << endl;
        }
};
int main(){
    //拷贝构造的三种时机: 1.直接拷贝 2.函数传参数拷贝 3.函数返回值拷贝
    //有时候我们为了避免拷贝的调用，使用&引用，来减少拷贝次数 
    //默认拷贝构造函数：对内置类型是复制字节的直接拷贝，对自定义类型是调用其拷贝构造函数
    date d1;     //默认形参全缺省的值
    d1.print();
    date d2(2023, 9, 17);
    d2.print();

    date d3(2023, 9, 19);
    date d4(d3);
    d4.print();

    return 0;
}